
package com.eva.android;

import net.x52im.mobileimsdk.android.utils.MBThreadPoolExecutor;

/**
 * 用于替代 AsyncTask 的异步任务实现类。
 *
 * @param <Params>
 * @param <Progress>
 * @param <Result>
 * @see android.os.AsyncTask
 * @since 7.2
 * @author JackJiang
 */
public abstract class NewAsyncTask<Params, Progress, Result> {

    public void execute(final Params... params) {
        MBThreadPoolExecutor.runOnMainThread(() -> {
            onPreExecute();
            MBThreadPoolExecutor.runInBackground(() -> {
                final Result code = doInBackground(params);
                MBThreadPoolExecutor.runOnMainThread(() -> { onPostExecute(code); });
            });
        });
    }

    /**
     * 请在主线程中调用之。
     */
    protected void onPreExecute() {
    }

    /**
     * 请在工作线程中调用之。
     */
    protected abstract Result doInBackground(Params... params);

    /**
     * 请在主线程中调用之。
     */
    protected void onPostExecute(Result code) {
    }
}
